import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI, { Message, MessageBox } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'

// 引入全局样式
import './assets/styles/global.css'
// 使用Font Awesome 5.x版本的兼容性导入方式，确保在低版本浏览器中正常工作
import '@fortawesome/fontawesome-free/css/all.min.css'

// 注册ElementUI
Vue.use(ElementUI, { size: 'small', zIndex: 3000 });
// 配置ElementUI全局方法
Vue.prototype.$message = Message;
Vue.prototype.$confirm = MessageBox.confirm;

// 配置axios
Vue.prototype.$http = axios
axios.defaults.baseURL = ''
axios.defaults.timeout = 600000

// 设置axios请求拦截器
axios.interceptors.request.use(
  config => {
    // 可以在这里添加token等认证信息
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 设置axios响应拦截器
axios.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    // 统一错误处理
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未授权，跳转到登录页
          Message.error('请先登录')
          localStorage.removeItem('token')
          router.push('/login')
          break
        case 403:
          Message.error('权限不足')
          break
        case 404:
          Message.error('请求的资源不存在')
          break
        case 500:
          Message.error('服务器内部错误')
          break
        default:
          Message.error(error.response.data.message || '请求失败')
      }
    } else if (error.request) {
      Message.error('网络错误，请检查网络连接')
    } else {
      Message.error('请求配置错误')
    }
    return Promise.reject(error)
  }
)

// 添加全局方法
Vue.prototype.$sleep = (ms) => {
  return new Promise(resolve => setTimeout(resolve, ms))
}

Vue.prototype.$formatDate = (date, format = 'yyyy-MM-dd HH:mm') => {
  if (!date) return ''
  if (typeof date === 'string' || typeof date === 'number') {
    date = new Date(date)
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'H+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds(),
    'q+': Math.floor((date.getMonth() + 3) / 3),
    'S': date.getMilliseconds()
  }
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
    }
  }
  return format
}

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')